<?php

namespace app\common\library;

use app\common\library\Exception;
use think\Config;
use fast\Random;

/**
 * 文件解析
 */
class FileAnalysis
{
    /**
     * 解析文件内容
     * 
     * @param string $filePath 文件路径
     * @return array
     */
    public function analysisFileContent($filePath)
    {
        if (empty($filePath)) {
            new Exception('File path cannot empty');
        }

        // 获取文件信息
        $fileInfo = pathinfo($filePath);
        \think\Log::record($fileInfo);

        switch ($fileInfo['extension']) {
            case 'xlsx':
                return $this->analysisXlsxFileContent($filePath);
                break;
            default:
                new Exception('Invalid fiel type');
                break;
        }

        return [];
    }

    /**
     * 解析xlsx文件的内容
     * 
     * @param string $filePath 文件路径
     * @return array
     */
    private function analysisXlsxFileContent($filePath)
    {
        if (empty($filePath)) {
            new Exception('File path cannot empty');
        }

        $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();

        // 建立excel对象
        $PHPExcel = $reader->load('.' . $filePath);
        // 读取excel文件中的指定工作表
        $currentSheet = $PHPExcel->getSheet(0);
        // 取得最大的列号
        $allColumn = $currentSheet->getHighestColumn();
        // 取得一共有多少行
        $allRow = $currentSheet->getHighestRow();
        $datas = array();
        // 遍历行
        for ($rowIndex = 1; $rowIndex <= $allRow; $rowIndex++) {

            // 遍历列
            for ($colIndex = 'A'; $colIndex <= $allColumn; $colIndex++) {

                // 获取单元格的内容
                $cell = $currentSheet->getCell($colIndex . $rowIndex)->getValue();

                // 收集数据
                $datas[$rowIndex][$colIndex] = $cell;
            }

            
        }

        return $datas;
    }

    /**
     * 解析xlsx文件中日期单元格的数据
     * 
     * @param int $value 值
     * @return string 日期格式: Y-m-d
     */
    public static function analysisXlsxDateValue($value)
    {
        $n = intval(($value - 25569) * 3600 * 24);     //转换成1970年以来的秒数
        return gmdate('Y-m-d', $n);              //格式化时间,不是用date哦, 时区相差8小时的
    }
}
